///////////////////////////////////////////////////////////////////////////////////////////////////
/// \file formic/fqmc/orb_opt.h
///
/// \brief   header file for orbital optimization
///
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef FORMIC_FQMC_ORB_OPT_HEADER
#define FORMIC_FQMC_ORB_OPT_HEADER

#include<boost/shared_ptr.hpp>

namespace formic {

  class InputBase;
  class Archive;
  class AllData;
  template<class S> class Hamiltonian;
  template<class S> class CoeffObj;

  namespace fqmc {

    template<class S> void optimize_orbitals(const formic::InputBase & userinp,
                                             formic::Hamiltonian<S> & ham,
                                             const boost::shared_ptr<formic::CoeffObj<S> > & co);

    void OptimizeOrbitals_command_function(formic::Archive & arch, formic::AllData & data);

  }

}

#endif
